Categories
BootstrapVue

BootstrapVue — Tabs

Spread the love

To make good looking Vue apps, we need to style our components.

To make our lives easier, we can use components with styles built-in.

We look at how to add tabs to our Vue apps.

Tabs

We can add tabbable panes into our app with the b-tabs component.

For example, we can write:

<template>  
  <div id="app">  
    <b-tabs content-class="mt-3">  
      <b-tab title="First" active>  
        <p>first tab</p>  
      </b-tab>  
      <b-tab title="Second">  
        <p>second tab</p>  
      </b-tab>  
      <b-tab title="Disabled" disabled>  
        <p>Bisabled tab</p>  
      </b-tab>  
    </b-tabs>  
  </div>  
</template>  
<script>  
export default {  
  name: "App"  
};  
</script>

We added the b-tabs component which houses the b-tab components.

b-tab has the tab heading as set by the title .

We can click on a tab heading to go to a tab.

disabled means the tab is disabled.

We can’t go to a disabled tab.

Cards Integration

We can put tabs into cards.

For instance, we can write:

<template>  
  <div id="app">  
    <b-card no-body>  
      <b-tabs card>  
        <b-tab title="One" active>  
          <b-card-text>Tab 1</b-card-text>  
        </b-tab>  
        <b-tab title="Two">  
          <b-card-text>Tab 2</b-card-text>  
        </b-tab>  
      </b-tabs>  
    </b-card>  
  </div>  
</template>  
<script>  
export default {  
  name: "App"  
};  
</script>

We disable the card body with the no-body prop.

Then we can display the tab content by putting b-tabs inside the b-card .

We can use b-card-text in a b-tab to display the content in the card.

We set the default active tab with the active prop.

The card prop on b-tabs make it work in card mode so that it looks correct in a card.

Subcomponents in b-tab will have the card-body class applied if it’s in card mode.

For example, if we have:

<template>  
  <div id="app">  
    <b-card no-body>  
      <b-tabs card>  
        <b-tab title="One" active>  
          <b-card-img bottom src="https://placekitten.com/200/200" alt="kitten"></b-card-img>  
          <b-card-footer>kitten</b-card-footer>  
        </b-tab>  
        <b-tab title="Two">  
          <b-card-text>Tab 2</b-card-text>  
        </b-tab>  
      </b-tabs>  
    </b-card>  
  </div>  
</template>  
<script>  
export default {  
  name: "App"  
};  
</script>

Then everything inside has the card-body class added.

Pills

We can display tabs in pills form with the pills prop:

<template>  
  <div id="app">  
    <b-card no-body>  
      <b-tabs pills card>  
        <b-tab title="Tab 1" active>  
          <b-card-text>Tab 1</b-card-text>  
        </b-tab>  
        <b-tab title="Tab 2">  
          <b-card-text>Tab 2</b-card-text>  
        </b-tab>  
      </b-tabs>  
    </b-card>  
  </div>  
</template>  
<script>  
export default {  
  name: "App"  
};  
</script>

Fill

The fill prop can be used to fill the available horizontal space proportionally with the tabs.

For example, we can write:

<template>  
  <div id="app">  
    <b-tabs fill>  
      <b-tab title="Tab 1" active>  
        <b-card-text>Tab 1</b-card-text>  
      </b-tab>  
      <b-tab title="Tab 2">  
        <b-card-text>Tab 2</b-card-text>  
      </b-tab>  
    </b-tabs>  
  </div>  
</template>  
<script>  
export default {  
  name: "App"  
};  
</script>

Justified

The justified prop lets us make the tabs equal width:

<template>  
  <div id="app">  
    <b-tabs justified>  
      <b-tab title="Tab 1" active>  
        <b-card-text>Tab 1</b-card-text>  
      </b-tab>  
      <b-tab title="Tab 2">  
        <b-card-text>Tab 2</b-card-text>  
      </b-tab>  
    </b-tabs>  
  </div>  
</template>  
<script>  
export default {  
  name: "App"  
};  
</script>

Alignment

The align prop lets us align the tabs.

The possible values are left , center , and right .

Therefore, we can write:

<template>  
  <div id="app">  
    <b-tabs align="center">  
      <b-tab title="Tab 1" active>  
        <b-card-text>Tab 1</b-card-text>  
      </b-tab>  
      <b-tab title="Tab 2">  
        <b-card-text>Tab 2</b-card-text>  
      </b-tab>  
    </b-tabs>  
  </div>  
</template>  
<script>  
export default {  
  name: "App"  
};  
</script>

Bottom Placement of Tab Controls

We can place the tab controls below the tab content with the end prop:

<template>  
  <div id="app">  
    <b-card no-body>  
      <b-tabs pills card end>  
        <b-tab title="Tab 1" active>  
          <b-card-text>Tab 1</b-card-text>  
        </b-tab>  
        <b-tab title="Tab 2">  
          <b-card-text>Tab 2</b-card-text>  
        </b-tab>  
      </b-tabs>  
    </b-card>  
  </div>  
</template>  
<script>  
export default {  
  name: "App"  
};  
</script>

It looks better will the pills prop to make the controls look like a button.

Conclusion

We can add tabs to display tabbed content.

It also integrates with cards.

By John Au-Yeung

Web developer specializing in React, Vue, and front end development.

Leave a Reply

Your email address will not be published. Required fields are marked *